#ifndef _EDATABULIST_H_
#define _EDATABULIST_H_

#include "edaMove.h"
#include "edaSolution.h"
#include "edaSerialize.h"
#include "edaDefine.h"

class edaTabuList : public edaSerialize
{
  public:
    edaTabuList() {}
    virtual ~edaTabuList() {}

    virtual edaTabuList* clone() const = 0;
    /**
     * Procedure to add a move into the tabu list.
     *
     * \param _move a new tabu move.
     * \param _sol the original solution associated to this move.
     */
    virtual void add(const edaMove *_move, const edaSolution *_sol) = 0;

    /**
     * Procedure to update tabu list content.
     */
    virtual void update() = 0;

    /**
     * Procedure which initializes the tabu list.
     */
    virtual void init() = 0;

    /**
     * Procedure to check that in current state, the _move is a tabu or not.
     *
     * \param _move A given move
     * \param _sol A solution
     * \return true or false
     */
    virtual bool check(const edaMove *_move, const edaSolution *_sol) = 0;

    setClassID(_SYSCLASSID_ + _CLSID_EDATABULIST_);
};

#endif
